NexusPi Git Node
meshchatx/src/backend/community_interfaces_directory.py 786bddfe0aebae27a59e4e8aa7a87ae9a1163c12 (786bddfe) Text, 5.82 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Convert mcx-interfaces (and legacy directory listing) rows into MeshChat interface preset dicts."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787re
Tff7b72from T7ee787typing Tff7b72import Te6edf3Any
Tff7b72from T7ee787urllibT7ee787.T7ee787parse Tff7b72import Te6edf3urlparse
Te6edf3DESCRIPTION Tff7b72= Ta5d6ff"Ta5d6ffmeshchatx.com/interfacesTa5d6ff"
Te6edf3DEFAULT_DIRECTORY_URL Tff7b72= Ta5d6ff"Ta5d6ffhttps://meshchatx.com/api/mcx-interfacesTa5d6ff"
Te6edf3ALLOWED_FETCH_HOST Tff7b72= Ta5d6ff"Ta5d6ffmeshchatx.comTa5d6ff"
Te6edf3_RE_REMOTE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff^Ta5d6ff\Ta5d6ffs*remoteTa5d6ff\Ta5d6ffs*=Ta5d6ff\Ta5d6ffs*(Ta5d6ff\Ta5d6ffS+)Ta5d6ff"Tb4b4b4, Te6edf3reTff7b72.Td2a8ffMULTILINE Tff7b72| Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4)
Te6edf3_RE_TARGET_HOST Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(
Ta5d6ffrTa5d6ff"Ta5d6ff^Ta5d6ff\Ta5d6ffs*target_hostTa5d6ff\Ta5d6ffs*=Ta5d6ff\Ta5d6ffs*(Ta5d6ff\Ta5d6ffS+)Ta5d6ff"Tb4b4b4,
Te6edf3reTff7b72.Td2a8ffMULTILINE Tff7b72| Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4,
Tb4b4b4)
Te6edf3_RE_TRANSPORT_IDENTITY Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(
Ta5d6ffrTa5d6ff"Ta5d6ff^Ta5d6ff\Ta5d6ffs*transport_identityTa5d6ff\Ta5d6ffs*=Ta5d6ff\Ta5d6ffs*(Ta5d6ff\Ta5d6ffS+)Ta5d6ff"Tb4b4b4,
Te6edf3reTff7b72.Td2a8ffMULTILINE Tff7b72| Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4,
Tb4b4b4)
Te6edf3_RE_PEERS_LINE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff^Ta5d6ff\Ta5d6ffs*peersTa5d6ff\Ta5d6ffs*=Ta5d6ff\Ta5d6ffs*(.+)$Ta5d6ff"Tb4b4b4, Te6edf3reTff7b72.Td2a8ffMULTILINE Tff7b72| Te6edf3reTff7b72.Td2a8ffIGNORECASETb4b4b4)
Tff7b72def Td2a8ffvalidate_directory_fetch_urlTb4b4b4(Te6edf3urlTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72if Tff7b72not Te6edf3url Tff7b72or Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3urlTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3msg Tff7b72= Ta5d6ff"Ta5d6ffURL must be a non-empty stringTa5d6ff"
Tff7b72raise Tf85149ValueErrorTb4b4b4(Te6edf3msgTb4b4b4)
Te6edf3parsed Tff7b72= Te6edf3urlparseTb4b4b4(Te6edf3urlTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3parsedTff7b72.Td2a8ffscheme Tff7b72!= Ta5d6ff"Ta5d6ffhttpsTa5d6ff"Tb4b4b4:
Te6edf3msg Tff7b72= Ta5d6ff"Ta5d6ffCommunity directory URL must use httpsTa5d6ff"
Tff7b72raise Tf85149ValueErrorTb4b4b4(Te6edf3msgTb4b4b4)
Te6edf3netloc Tff7b72= Te6edf3parsedTff7b72.Td2a8ffnetloc Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72if Ta5d6ff"Ta5d6ff@Ta5d6ff" Tff7b72in Te6edf3netlocTb4b4b4:
Te6edf3msg Tff7b72= Ta5d6ff"Ta5d6ffCommunity directory URL must not contain credentialsTa5d6ff"
Tff7b72raise Tf85149ValueErrorTb4b4b4(Te6edf3msgTb4b4b4)
Te6edf3host Tff7b72= Tb4b4b4(Te6edf3parsedTff7b72.Td2a8ffhostname Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3host Tff7b72!= Te6edf3ALLOWED_FETCH_HOSTTb4b4b4:
Te6edf3msg Tff7b72= Ta5d6ff"Ta5d6ffCommunity directory URL host is not allowedTa5d6ff"
Tff7b72raise Tf85149ValueErrorTb4b4b4(Te6edf3msgTb4b4b4)
Tff7b72return Te6edf3urlTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ffrows_from_payloadTb4b4b4(Te6edf3payloadTb4b4b4: Tffa657objectTb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Te6edf3AnyTb4b4b4]Tb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3payloadTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3payload
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3payloadTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3key Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffinterfacesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdataTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3rows Tff7b72= Te6edf3payloadTff7b72.Td2a8ffgetTb4b4b4(Te6edf3keyTb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3rowsTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3rows
Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffExpected list or object with Ta5d6ff'Ta5d6ffinterfacesTa5d6ff'Ta5d6ff or Ta5d6ff'Ta5d6ffdataTa5d6ff'Ta5d6ff arrayTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_parse_config_valueTb4b4b4(Te6edf3patternTb4b4b4: Te6edf3reTff7b72.Td2a8ffPatternTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4, Te6edf3cfgTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3m Tff7b72= Te6edf3patternTff7b72.Td2a8ffsearchTb4b4b4(Te6edf3cfgTb4b4b4)
Tff7b72if Tff7b72not Te6edf3mTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72return Te6edf3mTff7b72.Td2a8ffgroupTb4b4b4(T79c0ff1Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Ta5d6ff'Ta5d6ff"Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Ta5d6ff"Ta5d6ff'Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_first_peer_from_configTb4b4b4(Te6edf3cfgTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3raw Tff7b72= Te6edf3_parse_config_valueTb4b4b4(Te6edf3_RE_PEERS_LINETb4b4b4, Te6edf3cfgTb4b4b4)
Tff7b72if Tff7b72not Te6edf3rawTb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72for Te6edf3part Tff7b72in Te6edf3rawTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffsplitTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72= Te6edf3partTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Ta5d6ff'Ta5d6ff"Ta5d6ff'Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Ta5d6ff"Ta5d6ff'Ta5d6ff"Tb4b4b4)
Tff7b72if Te6edf3pTb4b4b4:
Tff7b72return Te6edf3p
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72def Td2a8ff_tcp_host_from_rowTb4b4b4(Te6edf3rowTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3cfgTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3h Tff7b72= Tb4b4b4(Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffaddressTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3hTb4b4b4:
Tff7b72return Te6edf3h
Tff7b72return Te6edf3_parse_config_valueTb4b4b4(Te6edf3_RE_REMOTETb4b4b4, Te6edf3cfgTb4b4b4) Tff7b72or Te6edf3_parse_config_valueTb4b4b4(
Te6edf3_RE_TARGET_HOSTTb4b4b4,
Te6edf3cfgTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_i2p_peerTb4b4b4(Te6edf3rowTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3cfgTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3h Tff7b72= Tb4b4b4(Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffhostTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffaddressTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3hTb4b4b4:
Tff7b72return Te6edf3h
Tff7b72return Te6edf3_first_peer_from_configTb4b4b4(Te6edf3cfgTb4b4b4)
Tff7b72def Td2a8ff_transport_idTb4b4b4(Te6edf3rowTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4, Te6edf3cfgTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3tid Tff7b72= Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftransportIdTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3tid Tff7b72is Tff7b72not Tff7b72None Tff7b72and Tffa657strTb4b4b4(Te6edf3tidTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72return Tffa657strTb4b4b4(Te6edf3tidTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3_parse_config_valueTb4b4b4(Te6edf3_RE_TRANSPORT_IDENTITYTb4b4b4, Te6edf3cfgTb4b4b4)
Tff7b72def Td2a8fftransform_directory_rowsTb4b4b4(Te6edf3rowsTb4b4b4: Tffa657listTb4b4b4[Te6edf3AnyTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4]Tb4b4b4:
Te6edf3out_listTb4b4b4: Tffa657listTb4b4b4[Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Te6edf3AnyTb4b4b4]Tb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3rowsTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72return Te6edf3out_list
Tff7b72for Te6edf3row Tff7b72in Te6edf3rowsTb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3rowTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787interface_editor Tff7b72import Te6edf3InterfaceEditor
Te6edf3name Tff7b72= Te6edf3InterfaceEditorTff7b72.Td2a8ffsanitize_interface_section_nameTb4b4b4(Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4)Tb4b4b4)
Te6edf3rtype Tff7b72= Tb4b4b4(Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Te6edf3type_name Tff7b72= Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeNameTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3type_nameTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3type_name Tff7b72= Tffa657strTb4b4b4(Te6edf3type_nameTb4b4b4)
Te6edf3cfg Tff7b72= Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffconfigTa5d6ff"Tb4b4b4) Tff7b72or Ta5d6ff"Ta5d6ff"
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3cfgTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Te6edf3cfg Tff7b72= Ta5d6ff"Ta5d6ff"
Tff7b72if Te6edf3rtype Tff7b72== Ta5d6ff"Ta5d6ffrnodeTa5d6ff"Tb4b4b4:
Tff7b72continue
Tff7b72if Te6edf3rtype Tff7b72== Ta5d6ff"Ta5d6ffi2pTa5d6ff"Tb4b4b4:
Te6edf3addr Tff7b72= Te6edf3_i2p_peerTb4b4b4(Te6edf3rowTb4b4b4, Te6edf3cfgTb4b4b4)
Tff7b72if Tff7b72not Te6edf3addrTb4b4b4:
Tff7b72continue
Te6edf3out_listTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3name Tff7b72or Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffI2PInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffi2p_peersTa5d6ff"Tb4b4b4: Tb4b4b4[Te6edf3addrTb4b4b4]Tb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3DESCRIPTIONTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72continue
Te6edf3port Tff7b72= Te6edf3rowTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffportTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3port Tff7b72is Tff7b72None Tff7b72or Te6edf3port Tff7b72== Ta5d6ff"Ta5d6ff"Tb4b4b4:
Tff7b72continue
Tff7b72tryTb4b4b4:
Te6edf3port_i Tff7b72= Tffa657intTb4b4b4(Te6edf3portTb4b4b4)
Tff7b72except Tb4b4b4(Tf85149TypeErrorTb4b4b4, Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3addr Tff7b72= Te6edf3_tcp_host_from_rowTb4b4b4(Te6edf3rowTb4b4b4, Te6edf3cfgTb4b4b4)
Tff7b72if Tff7b72not Te6edf3addrTb4b4b4:
Tff7b72continue
Te6edf3tid Tff7b72= Te6edf3_transport_idTb4b4b4(Te6edf3rowTb4b4b4, Te6edf3cfgTb4b4b4)
Te6edf3backbone_in_type Tff7b72= Te6edf3rtype Tff7b72== Ta5d6ff"Ta5d6ffbackboneTa5d6ff" Tff7b72or Te6edf3type_name Tff7b72== Ta5d6ff"Ta5d6ffBackboneInterfaceTa5d6ff"
Te6edf3backbone_in_tcp Tff7b72= Te6edf3rtype Tff7b72== Ta5d6ff"Ta5d6fftcpTa5d6ff" Tff7b72and Ta5d6ff"Ta5d6ffBackboneInterfaceTa5d6ff" Tff7b72in Te6edf3cfg
Te6edf3is_backboneish Tff7b72= Te6edf3backbone_in_type Tff7b72or Te6edf3backbone_in_tcp
Te6edf3is_tcp_style Tff7b72= Te6edf3rtype Tff7b72== Ta5d6ff"Ta5d6fftcpTa5d6ff" Tff7b72or Te6edf3type_name Tff7b72== Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"
Tff7b72if Te6edf3is_backboneish Tff7b72and Te6edf3tidTb4b4b4:
Te6edf3out_listTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3name Tff7b72or Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffBackboneInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffremoteTa5d6ff"Tb4b4b4: Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftarget_portTa5d6ff"Tb4b4b4: Te6edf3port_iTb4b4b4,
Ta5d6ff"Ta5d6fftransport_identityTa5d6ff"Tb4b4b4: Te6edf3tidTb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3DESCRIPTIONTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72continue
Tff7b72if Te6edf3is_backboneish Tff7b72and Tff7b72not Te6edf3tidTb4b4b4:
Te6edf3out_listTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3name Tff7b72or Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftarget_hostTa5d6ff"Tb4b4b4: Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftarget_portTa5d6ff"Tb4b4b4: Te6edf3port_iTb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3DESCRIPTIONTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72continue
Tff7b72if Te6edf3is_tcp_styleTb4b4b4:
Te6edf3out_listTff7b72.Td2a8ffappendTb4b4b4(
Tb4b4b4{
Ta5d6ff"Ta5d6ffnameTa5d6ff"Tb4b4b4: Te6edf3name Tff7b72or Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ffTCPClientInterfaceTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftarget_hostTa5d6ff"Tb4b4b4: Te6edf3addrTb4b4b4,
Ta5d6ff"Ta5d6fftarget_portTa5d6ff"Tb4b4b4: Te6edf3port_iTb4b4b4,
Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4: Te6edf3DESCRIPTIONTb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4)
Tff7b72return Te6edf3out_list
Served by rngit 1.5.2 - Generated in 0.03s